When developing a software product, the code base for the product can be extensive. As such, building, testing, and validating a product can be very time-consuming and challenging. In a system where success depends on all the moving pieces being healthy, the probability of success decreases exponentially with the number of pieces, which is a common characteristic in monolithic engineering systems. Previous solutions generally rely on manual intervention, where a user builds code, and takes corrective actions based on the results, which is time-consuming and inefficient.